/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.edu.cheque;

import br.edu.banco.Banco;
import br.edu.cliente.Cliente;
import br.edu.situacaocheque.SituacaoCheque;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author 'Pedro
 */
@Entity
public class Cheque implements Serializable, Comparable<Cheque>{
    
    @Id
    @GeneratedValue
    private int id;
    
    private String nrcheque;
    
    @ManyToOne
    private Cliente correntista;
    
    @ManyToOne
    private Banco banco;
    
    private String cidade;
    
    @ManyToOne
    private Cliente cliente;
    
    private double valor;
    
    @OneToMany(mappedBy = "cheque")
    private List<SituacaoCheque> situacaocheque;
    
    @Temporal(TemporalType.DATE)
    private Date data;
    
    @Temporal(TemporalType.DATE)
    private Date bompara;

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the nrcehque
     */
    public String getNrcheque() {
        return nrcheque;
    }

    /**
     * @param nrcehque the nrcehque to set
     */
    public void setNrcheque(String nrcehque) {
        this.nrcheque = nrcehque;
    }

    /**
     * @return the correntista
     */
    public Cliente getCorrentista() {
        return correntista;
    }

    /**
     * @param correntista the correntista to set
     */
    public void setCorrentista(Cliente correntista) {
        this.correntista = correntista;
    }

    /**
     * @return the banco
     */
    public Banco getBanco() {
        return banco;
    }

    /**
     * @param banco the banco to set
     */
    public void setBanco(Banco banco) {
        this.banco = banco;
    }

    /**
     * @return the cidade
     */
    public String getCidade() {
        return cidade;
    }

    /**
     * @param cidade the cidade to set
     */
    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    /**
     * @return the cliente
     */
    public Cliente getCliente() {
        return cliente;
    }

    /**
     * @param cliente the cliente to set
     */
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    /**
     * @return the valor
     */
    public double getValor() {
        return valor;
    }

    /**
     * @param valor the valor to set
     */
    public void setValor(double valor) {
        this.valor = valor;
    }

    /**
     * @return the situacaocheque
     */
    public List<SituacaoCheque> getSituacaocheque() {
        return situacaocheque;
    }

    /**
     * @param situacaocheque the situacaocheque to set
     */
    public void setSituacaocheque(List<SituacaoCheque> situacaocheque) {
        this.situacaocheque = situacaocheque;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 89 * hash + this.id;
        hash = 89 * hash + Objects.hashCode(this.nrcheque);
        hash = 89 * hash + Objects.hashCode(this.correntista);
        hash = 89 * hash + Objects.hashCode(this.banco);
        hash = 89 * hash + Objects.hashCode(this.cidade);
        hash = 89 * hash + Objects.hashCode(this.cliente);
        hash = 89 * hash + (int) (Double.doubleToLongBits(this.valor) ^ (Double.doubleToLongBits(this.valor) >>> 32));
        hash = 89 * hash + Objects.hashCode(this.situacaocheque);
        hash = 89 * hash + Objects.hashCode(this.data);
        hash = 89 * hash + Objects.hashCode(this.bompara);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Cheque other = (Cheque) obj;
        if (this.id != other.id) {
            return false;
        }
        if (!Objects.equals(this.nrcheque, other.nrcheque)) {
            return false;
        }
        if (!Objects.equals(this.correntista, other.correntista)) {
            return false;
        }
        if (!Objects.equals(this.banco, other.banco)) {
            return false;
        }
        if (!Objects.equals(this.cidade, other.cidade)) {
            return false;
        }
        if (!Objects.equals(this.cliente, other.cliente)) {
            return false;
        }
        if (Double.doubleToLongBits(this.valor) != Double.doubleToLongBits(other.valor)) {
            return false;
        }
        if (!Objects.equals(this.situacaocheque, other.situacaocheque)) {
            return false;
        }
        if (!Objects.equals(this.data, other.data)) {
            return false;
        }
        if (!Objects.equals(this.bompara, other.bompara)) {
            return false;
        }
        return true;
    }

    
   

    @Override
    public int compareTo(Cheque t) {
        return nrcheque.compareTo(t.nrcheque);
    }

    /**
     * @return the data
     */
    public Date getData() {
        return data;
    }

    /**
     * @param data the data to set
     */
    public void setData(Date data) {
        this.data = data;
    }

    /**
     * @return the bompara
     */
    public Date getBompara() {
        return bompara;
    }

    /**
     * @param bompara the bompara to set
     */
    public void setBompara(Date bompara) {
        this.bompara = bompara;
    }

   
    
}
